package com.sky.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sky.dto.DocumentPageQueryDTO;
import com.sky.dto.DocumentUpdateDTO;
import com.sky.dto.DocumentCategoryDTO;
import com.sky.entity.Document;
import com.sky.entity.DocumentCategory;
import com.sky.vo.DocumentVO;
import com.sky.vo.DocumentStatisticsVO;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

public interface DocumentService {

    /**
     * 分页查询文档列表
     * @param pageQueryDTO 查询条件
     * @return 分页结果
     */
    Page<DocumentVO> pageQuery(DocumentPageQueryDTO pageQueryDTO);

    /**
     * 根据ID获取文档详情
     * @param id 文档ID
     * @return 文档详情
     */
    DocumentVO getById(Integer id);

    /**
     * 上传文档
     * @param file 文件
     * @param title 文档标题
     * @param category 文档分类
     * @param isPublic 是否公开 (private/pending_review/public)
     * @return 新建文档ID
     */
    Integer upload(MultipartFile file, String title, String category, String isPublic);

    /**
     * 更新文档信息
     * @param documentUpdateDTO 更新信息
     */
    void update(DocumentUpdateDTO documentUpdateDTO);

    /**
     * 删除文档
     * @param id 文档ID
     */
    void delete(Integer id);

    /**
     * 切换文档状态
     * @param id 文档ID
     * @param status 文档状态
     */
    void toggleStatus(Integer id, String status);

    /**
     * 切换文档公开性
     * @param id 文档ID
     * @param isPublic 是否公开 (private/pending_review/public)
     */
    void togglePublic(Integer id, String isPublic);

    /**
     * 下载文档
     * @param id 文档ID
     * @param response 响应对象
     */
    void download(Integer id, HttpServletResponse response) throws IOException;



    /**
     * 预览文档
     * @param id 文档ID
     * @param response 响应对象
     * @throws IOException IO异常
     */
    void preview(Integer id, HttpServletResponse response) throws IOException;

    /**
     * 获取文档分类列表
     * @return 分类列表
     */
    List<DocumentCategory> getCategoryList();

    /**
     * 新增文档分类
     * @param categoryDTO 分类信息
     * @return 新建分类ID
     */
    Integer addCategory(DocumentCategoryDTO categoryDTO);

    /**
     * 更新文档分类
     * @param id 分类ID
     * @param categoryDTO 分类信息
     */
    void updateCategory(Integer id, DocumentCategoryDTO categoryDTO);

    /**
     * 删除文档分类
     * @param id 分类ID
     */
    void deleteCategory(Integer id);

    /**
     * 获取文档统计信息
     * @return 统计信息
     */
    DocumentStatisticsVO getStatistics();
    
    /**
     * 文档审核
     * @param id 文档ID
     * @param action 审核动作 (approve/reject)
     */
    void reviewDocument(Integer id, String action);
}